package com.clps.algorithm.chapter04.删除倒数第k个结点;

import com.clps.algorithm.chapter12.链表排序.ListNode;

/**
 * 给你一个链表，请问如何删除链表中的倒数第k个结点？假设链表中结点的总数为n，那么1≤k≤n。要求只能遍历链表一次。
 * 例如输入图4.1中（a）的链表，删除倒数第2个结点之后的链表如图4.1中（b）所示。
 * 图4.1：从链表中删除倒数第2个结点。（a）一个包含6个结点的链表。（b）删除倒数第2个结点（值为5的结点）之后的链表。
 */
public class demo01 {
    public static void main(String[] args) {

    }


   public  ListNode removeNthFromEnd(ListNode head,int n){
       ListNode dummy = new ListNode(0);
       dummy.next = head;

       ListNode front = head,back = dummy;
       for (int i = 0; i <n ; i++) {
           front = front.next;
       }
       while (front!=null){
           front = front.next;
           back = back.next;
       }
       back.next = back.next.next;
       return  dummy.next;
   }
}
